package com.qfedu.edu.seckill.manager;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
public class RedisManager {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 向String中添加数据
     * @param key
     * @param val
     * @param expire
     * @param timeUnit
     */
    public void addString(String key, String val, int expire, TimeUnit timeUnit) {
        stringRedisTemplate.opsForValue().set(key,val,expire,timeUnit);
    }

    /**
     * 从String类型中获取这个数据
     * @param key
     * @return
     */
    public String getString(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    /**
     * 去Redis中删除某一个key
     * @param key
     */
    public void deleteKey(String key) {
        stringRedisTemplate.delete(key);
    }

    /**
     * 向这个String中写入数据
     * @param key
     * @param val
     * @param expire
     * @param timeUnit
     */
    public void addObject(String key, Integer val, int expire, TimeUnit timeUnit) {
        redisTemplate.opsForValue().set(key,val,expire,timeUnit);
    }

    /**
     * 统计ZSet中得分区间内成员的个数
     * @param key
     * @param startScore
     * @param endScore
     */
    public long countZSetByScore(String key, long startScore, long endScore) {
        return redisTemplate.opsForZSet().count(key, startScore, endScore);
    }
    /**
     * 向ZSet中添加数据
     * @param key
     * @param score
     * @param val
     */
    public void addZSet(String key, long score, String val) {
        redisTemplate.opsForZSet().add(key,val,score);
    }

    /**
     * 判断这个key在redis中是否存在
     * @param key
     * @return
     */
    public boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }

    /**
     * 递增数量
     * @param key
     */
    public void incr(String key) {
        redisTemplate.opsForValue().increment(key);
    }

    /**
     * 在String类型中去获取这个数据
     * @param stockKey
     * @return
     */
    public Object getObject(String stockKey) {
        return redisTemplate.opsForValue().get(stockKey);
    }

    /**
     * 自减
     * @param key
     */
    public void decr(String key) {
        redisTemplate.opsForValue().decrement(key);
    }
}
